package com.fingard.dsp.bank.directbank.lianlianpay01;

import com.fingard.dsp.bank.directConfig.FtpSet;
import com.fingard.dsp.bank.directConfig.TaskTimerSet;
import com.fingard.dsp.bank.directbank.bankInterface.IScheduleTask;
import com.fingard.io.FileHelper;
import com.fingard.net.FtpReceiver;
import com.fingard.net.SftpPortClient;
import com.fingard.text.StringHelper;

import java.io.File;
import java.util.*;

/**
 * 连连平台定时任务
 * @author alan getStatement()
 * @date 2020-06-05
 */
public class LianLianPay01ScheduleTask extends LianLianPay01Base implements IScheduleTask {
    @Override
    public void execTask(TaskTimerSet timerSet) {
        if (timerSet.taskNameList.toLowerCase().contains("statement")) {
            getStatement();
        }
    }

    /**
     * 对账单下载
     */
    private void getStatement() {
        try {
            //0、检查配置项
            String gruopIdArr=getBankConfig().getValueAsString("groupIdArr");
            if(StringHelper.isNullOrEmpty(gruopIdArr)){
                throw new Exception("商户号未配置，请在config.xml中配置！");
            }
            String downloadFileType=getBankConfig().getValueAsString("downloadFileType");
            if(StringHelper.isNullOrEmpty(downloadFileType)){
                throw new Exception("下载文件类型未配置，请在config.xml中配置！");
            }
            //1、从sftp上下载文件
            FtpSet ftpSet = bankFront.getFtpSet("statement");
            WriteBankLogLn("SFTP下载地址：sftp://" + ftpSet.serverIP + ":" + ftpSet.port);
            WriteBankLogLn("对账单文件本地保存地址："+transDownloadFile);
            WriteBankLogLn("***********连接SFTP服务器开始***********");
            SftpPortClient sftpPortClient = new SftpPortClient(ftpSet);
            FtpReceiver receiver=new FtpReceiver();
            //需要下载的商户
            String[] groupArr=gruopIdArr.split(",");
            //需要下载的文件类型
            String[] fileType=downloadFileType.split(",");
            //开始下载文件
            for(String groupId:groupArr){
                //创建本地保存的目录
                if(!FileHelper.existFile(transDownloadFile)){
                    FileHelper.mkdir(transDownloadFile);
                }
                //开始从sftp上下载文件
                receiver=sftpPortClient.downloadFileBySftp(groupId,transDownloadFile,fileType);
            }
            sftpPortClient.disconnect();
            WriteBankLogLn("***********连接SFTP服务器结束***********");
            if (receiver.isCompleted) {
                WriteBankLogLn("记录下载文件数量start");
                if (StringHelper.isNullOrEmpty(receiver.connMsg)) {
                    WriteBankLogLn("从银行下载的文件数量：0");
                } else {
                    List<String> fileList = Arrays.asList(receiver.connMsg.split("\\|"));
                    String fileStr = receiver.connMsg.replaceAll("\\|", "\r\n");
                    WriteBankLogLn("从银行下载的文件数量：" + fileList.size() + "下载的文件： \r\n" + fileStr);
                }
            } else {
                WriteBankLogLn("连接SFTP失败，请检查配置、通道是否正常。失败原因：\r\n" + receiver.connMsg);
            }
            //2、开始处理文件
            File transFileSavePath=new File(transDownloadFile);
            for(File file:transFileSavePath.listFiles()){
                if(file.isFile()){
                    String fileName=file.getName();
                    if(fileName.contains("_") && fileName.split("_").length>2){
                        String[] fileNameArr=fileName.split("_");
                        String oid=fileNameArr[1];
                        String payDate=fileNameArr[2].substring(0,fileNameArr[2].indexOf("."));
                        String localSavePath=transDownloadFile+oid+File.separator+payDate+File.separator+fileName;
                        if(!FileHelper.existFile(localSavePath)){
                            FileHelper.copyFile(file.getPath(),localSavePath);
                        }
                    }else {
                        WriteBankLogLn("不符合要求文件，不处理。文件名为："+fileName);
                    }
                }
            }
        } catch (Exception e) {
            WriteBankLogLn(e);
        }
    }
}
